# 导入SQLAlchemy的列类型和函数
# Column: 用于定义表的列
# Integer, String, DateTime: 是列的数据类型
# func: 用于在ORM查询中使用SQL函数，如func.now()对应SQL的NOW()
from sqlalchemy import Column, Integer, String, DateTime, func
# 导入我们创建的基础类Base
from utils.db_manager import Base

# 定义User类，它继承自Base，这告诉SQLAlchemy这个类是一个需要映射到数据库表的模型
class User(Base):
    # __tablename__指定了这个模型对应数据库中的表名
    __tablename__ = 'users'
    
    # 定义模型的属性，每个属性都使用Column()来创建一个列
    # id: 整数类型，主键，自动增长
    id = Column(Integer, primary_key=True, autoincrement=True)
    # username: 字符串类型，长度50，不能为空，且值必须唯一
    username = Column(String(50), nullable=False, unique=True)
    # email: 字符串类型，长度100，不能为空，值唯一
    email = Column(String(100), nullable=False, unique=True)
    # password: 字符串类型，长度255，不能为空（通常存储的是哈希后的密码）
    password = Column(String(255), nullable=False)
    # created_at: 日期时间类型，默认值为当前数据库时间
    created_at = Column(DateTime, default=func.now())
    # updated_at: 日期时间类型，默认值为当前时间，并且在每次更新记录时自动更新为当前时间
    updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
    
    # __repr__是一个特殊方法，用于定义对象的“官方”字符串表示形式
    # 当我们打印一个User对象时，会显示这里定义的格式，便于调试
    def __repr__(self):
        return f"<User(id={self.id}, username='{self.username}', email='{self.email}')>"